虽然你的手机游戏很棒
但是用户却抱怨加载时间太长
经过一些性能分析后 找到了问题所在
你花了很多时间来加载游戏数据
我是Colt McAnlis
我们的新型flatbuffers库
可以让用户感到加载更快
让你觉得设计更简单
如你所知 内容加载真是个超级慢的过程啊.
所有内容工具菜单的游戏数据存在某个格式里的
例如 物理 动画 电子表格数据
这些装在你游戏里的数据 转换给用户
它还能计算临时数据
比如通过网络连接发送你的游戏数据然后重新加载
因为这个过程对游戏开发至关重要
那我们如何去优化她的性能呢
要做到这一点 我们回到最基本的东西上来
序列化的过程就是将内存中的数据结构转换为数据格式
第一 在某种情况下 可以转换为内存
第二 说简单点就是可以不用占用太多空间
现在 一些常用的序列化格式就是XML和JSON
主要是因为它对于普通人而言 它易于阅读
也就是说 你可以在文本编辑器中打开这些文件
随性的修改文件 并且还能够很好的知道自己所做的
这个已经普及到了语言的支持
例如C# Java 和JavaScript
但是事实上 这些格式还是有些严重的不足的
首先 他们内容过大 过于冗长的句法使得这些格式
具有可读性和易用性
使得文件比他实际需要还要大得多
其次 这些格式的太过于固定的性质
使得反序列过程遇上了更大的阻力
解析系统先读入字符串数据 然后运行分析
以确定哪种数据类型在转换之前可以安放于内存中
更糟的是 当你的格式支持更先进的类型
如界面 时间戳 对象
一旦复杂度达到一定值的时候
那么结果就是关于速度的反序列问题
为了处理这些问题 我们已经开发了一个
叫做flatbuffers的新游戏的开放源码工具
这个库回到基本序列化 也就是说
在快速的编码和解码的同时
也可能产生最小的编码文件
现在 说得高深点 就是flatbuffers
依靠创建一个描述将被序列化的
数据类型文件来运行称之为模式
然后被移交给可以生成代码文件的句法编译器
你可以在应用程序中包含编码或者解码你已定义的格式
因为你游戏结构是复杂的
你编入的编译程序模式的结构
允许你描述数据结构的原始关系类型
例如 可重用对象类型 枚举类型和基本类型
这个结构使得flatbuffers更加安全
不需要任何类型转换 内存分配
就算在加载时也不用解压
这绝对是一个速度的大提升
只要你创建好了所有可序列化数据的文件模式
这些模式就可以被你应用到C编译器 生成游戏源代码
通过准确的命令行触发器
你可以生成C++ Java甚至是
你可以转回到repo（指安装位置）和编译源代码文件
现在 不管你用的是什么编程语言
使用flatbuffers加载数据都是超级简单
是一款没有推特注册教程语法编辑和内置FTP功能
但它有一个其他编辑器不具备的特性推特翻墙软件下载
序列化流字节
传递给单行CodeToGo(掌上代码)
转换成你需要的对象 最后你就可以准备使用它啦
现在 一切都已经完备啦 但是它究竟有多快呢
我们来看看flatbuffers与其他一些格式
相比较而言是怎么样的
比如缓冲器和JSON
我们可看到 关于解码和编码时间这个重要因素
flatbuffers打败了其他方式
事实上 当flatbuffers并排
你不能看到flatbuffers时间图
恩 现在重要的是测试数据的编码大小
在短暂的的编码和解码时间里 可以看到
涉及到数据的原始大小以及zlib压缩版本时
flatbuffers最小的
对了 还有个事儿如果你改变游戏的数据格式时
它会伴随着旧格式 兼容性引起大混乱
你知道这将会是怎么样的情况吗
Flatbuffers却不存在这样的问题发生
因为在不影响原数据和原程序的前提下
Flatbuffers提供演变模式的功能依我看
听起来这个是超炫的事儿
当然 在这个项目中还有更好的特性留待
研究和探索想要了解
更多关于flatbuffers的文库
或者想知道在这个下是怎样运行的
看看flatbuffers文档页码
序列化数据不应该是个痛苦的事儿
现在就去创建个好玩儿的游戏
好玩儿的游戏----我们写押韵了吗